package edu.client;

import java.util.LinkedList;

import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.LayoutPanel;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;

import edu.client.VentasService.VentasService;
import edu.client.VentasService.VentasServiceAsync;
import edu.shared.DTO.OrdenPedidoDTO;
import edu.shared.DTO.RenglonOrdenPedidoDTO;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;

public class P_DetalleOrdenPedido extends PopupPanel {
	
	private static final int CODIGO = 0;
	private static final int NOMBRE_PARA_CLIENTE = 1;
	private static final int CANTIDAD = 2;
	private static final int OBSERVACIONES = 3;
	
	TextBox nroOrdenPedidoTB;
	TextBox fechaGeneracionTB;
	TextBox clienteTB;
	TextBox fechaPrevistaEntregaTB;
	TextArea observacionTA;
	
	private FlexTable ftEquiposYComponentes;
	
	public P_DetalleOrdenPedido(long nroOrdenPedido) {
		
		super(false);
		
		LayoutPanel layoutPanel = new LayoutPanel();
		setWidget(layoutPanel);
		layoutPanel.setSize("1000px", "570px");
		setStyleName("fondoPopup");
		
		VentasServiceAsync ventasService = GWT.create(VentasService.class);
		
		ventasService.getOrdenPedidoCompleta(nroOrdenPedido, new AsyncCallback<OrdenPedidoDTO>() {
			@Override
			public void onSuccess(OrdenPedidoDTO ordenPedidoDTO) {
				cargarPantalla(ordenPedidoDTO);
			}
			
			@Override
			public void onFailure(Throwable caught) {
				Window.alert("ERROR EN EL SERVICIO");
			}
		});
		
		Label lblDetalleOrdenPedido = new Label("DETALLE DE LA ORDEN DE PEDIDO");
		lblDetalleOrdenPedido.setStyleName("labelTitulo");
		layoutPanel.add(lblDetalleOrdenPedido);
		layoutPanel.setWidgetLeftWidth(lblDetalleOrdenPedido, 2.5, Unit.PCT, 95.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(lblDetalleOrdenPedido, 15.0, Unit.PX, 50.0, Unit.PX);
		
		Label lblNroOrdenPedido = new Label("N° ORDEN DE PEDIDO:");
		lblNroOrdenPedido.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		layoutPanel.add(lblNroOrdenPedido);
		layoutPanel.setWidgetLeftWidth(lblNroOrdenPedido, 0.0, Unit.PCT, 17.8, Unit.PCT);
		layoutPanel.setWidgetTopHeight(lblNroOrdenPedido, 69.0, Unit.PX, 19.0, Unit.PX);
		
		nroOrdenPedidoTB = new TextBox();
		layoutPanel.add(nroOrdenPedidoTB);
		layoutPanel.setWidgetLeftWidth(nroOrdenPedidoTB, 18.0, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(nroOrdenPedidoTB, 65.0, Unit.PX, 32.0, Unit.PX);
		nroOrdenPedidoTB.setEnabled(false);
		
		Label lblFechaGeneracion = new Label("FECHA DE GENERACIÓN:");
		lblFechaGeneracion.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		layoutPanel.add(lblFechaGeneracion);
		layoutPanel.setWidgetLeftWidth(lblFechaGeneracion, 45.0, Unit.PCT, 24.8, Unit.PCT);
		layoutPanel.setWidgetTopHeight(lblFechaGeneracion, 67.0, Unit.PX, 19.0, Unit.PX);
		
		fechaGeneracionTB = new TextBox();
		layoutPanel.add(fechaGeneracionTB);
		layoutPanel.setWidgetLeftWidth(fechaGeneracionTB, 70.0, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(fechaGeneracionTB, 62.0, Unit.PX, 32.0, Unit.PX);
		fechaGeneracionTB.setEnabled(false);
		
		Label lblCliente = new Label("CLIENTE:");
		lblCliente.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		layoutPanel.add(lblCliente);
		layoutPanel.setWidgetLeftWidth(lblCliente, 0.0, Unit.PCT, 17.8, Unit.PCT);
		layoutPanel.setWidgetTopHeight(lblCliente, 105.0, Unit.PX, 19.0, Unit.PX);
		
		clienteTB = new TextBox();
		layoutPanel.add(clienteTB);
		layoutPanel.setWidgetLeftWidth(clienteTB, 18.0, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(clienteTB, 100.0, Unit.PX, 32.0, Unit.PX);
		clienteTB.setEnabled(false);
		
		Label lblFechaPrevistaEntrega = new Label("FECHA PREVISTA DE ENTREGA:");
		lblFechaPrevistaEntrega.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		layoutPanel.add(lblFechaPrevistaEntrega);
		layoutPanel.setWidgetLeftWidth(lblFechaPrevistaEntrega, 45.0, Unit.PCT, 24.8, Unit.PCT);
		layoutPanel.setWidgetTopHeight(lblFechaPrevistaEntrega, 105.0, Unit.PX, 19.0, Unit.PX);
		
		fechaPrevistaEntregaTB = new TextBox();
		layoutPanel.add(fechaPrevistaEntregaTB);
		layoutPanel.setWidgetLeftWidth(fechaPrevistaEntregaTB, 70.0, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(fechaPrevistaEntregaTB, 100.0, Unit.PX, 32.0, Unit.PX);
		fechaPrevistaEntregaTB.setEnabled(false);
		
		Label lblObservacion = new Label("OBSERVACIÓN:");
		lblObservacion.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		layoutPanel.add(lblObservacion);
		layoutPanel.setWidgetLeftWidth(lblObservacion, 0.0, Unit.PCT, 17.8, Unit.PCT);
		layoutPanel.setWidgetTopHeight(lblObservacion, 147.0, Unit.PX, 19.0, Unit.PX);
		
		observacionTA = new TextArea();
		layoutPanel.add(observacionTA);
		layoutPanel.setWidgetLeftWidth(observacionTA, 18.0, Unit.PCT, 77.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(observacionTA, 135.0, Unit.PX, 47.0, Unit.PX);
		observacionTA.setEnabled(false);
		
		//Sección equipos y componentes
		Label lblEquiposYComponentes = new Label("EQUIPOS Y COMPONENTES");
		lblEquiposYComponentes.setStyleName("labelTitulo");
		layoutPanel.add(lblEquiposYComponentes);
		layoutPanel.setWidgetLeftWidth(lblEquiposYComponentes, 2.5, Unit.PCT, 95.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(lblEquiposYComponentes, 180.0, Unit.PX, 50.0, Unit.PX);
		
		ScrollPanel spEquiposYComponente = new ScrollPanel();
		spEquiposYComponente.setStyleName("tabla");
		layoutPanel.add(spEquiposYComponente);
		layoutPanel.setWidgetLeftWidth(spEquiposYComponente, 5.0, Unit.PCT, 90.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(spEquiposYComponente, 235.0, Unit.PX, 250.0, Unit.PX);
		
		ftEquiposYComponentes = new FlexTable();
		spEquiposYComponente.setWidget(ftEquiposYComponentes);
		ftEquiposYComponentes.setSize("100%", "100%");
		
		ftEquiposYComponentes.setText(0, CODIGO, "CÓDIGO");
		ftEquiposYComponentes.getCellFormatter().setWidth(0, CODIGO, "25%");
		ftEquiposYComponentes.setText(0, NOMBRE_PARA_CLIENTE, "NOMBRE PARA CLIENTE");
		ftEquiposYComponentes.getCellFormatter().setWidth(0, NOMBRE_PARA_CLIENTE, "25%");
		ftEquiposYComponentes.setText(0, CANTIDAD, "CANTIDAD");
		ftEquiposYComponentes.getCellFormatter().setWidth(0, CANTIDAD, "25%");
		ftEquiposYComponentes.setText(0, OBSERVACIONES, "OBSERVACIONES");
		ftEquiposYComponentes.getCellFormatter().setWidth(0, OBSERVACIONES, "25%");
		ftEquiposYComponentes.getRowFormatter().addStyleName(0, "tablaEncabezado");
				
		Label lblPie = new Label("");
		lblPie.setStyleName("labelTitulo");
		layoutPanel.add(lblPie);
		layoutPanel.setWidgetLeftWidth(lblPie, 2.5, Unit.PCT, 95.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(lblPie, 450.0, Unit.PX, 50.0, Unit.PX);
		
		//Sección de los últimos botones.
		Button salirBtn = new Button("SALIR");
		layoutPanel.add(salirBtn);
		layoutPanel.setWidgetRightWidth(salirBtn, 5.0, Unit.PCT, 10.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(salirBtn, 530.0, Unit.PX, 28.0, Unit.PX);
		
		salirBtn.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				salir();
			}
		});
	}
	
	private void cargarPantalla(OrdenPedidoDTO ordenPedidoDTO){
		
		nroOrdenPedidoTB.setText(String.valueOf(ordenPedidoDTO.getNroOrden()));
						
		DateTimeFormat fmtDate = DateTimeFormat.getFormat("dd/MM/yyyy");
		String fechaGeneracion = fmtDate.format(ordenPedidoDTO.getFechaGeneracion());
		
		fechaGeneracionTB.setText(fechaGeneracion);
						
		clienteTB.setText(ordenPedidoDTO.getNombreCliente());
		
		String fechaPrevistaEntrega = "";
		
		if (ordenPedidoDTO.getFechaPrevistaEntrega() != null)
			fechaPrevistaEntrega = fmtDate.format(ordenPedidoDTO.getFechaPrevistaEntrega());
		
		fechaPrevistaEntregaTB.setText(fechaPrevistaEntrega);
						
		observacionTA.setText(ordenPedidoDTO.getObservacion());
		
		//Cargamos los renglones en la tabla
		LinkedList<RenglonOrdenPedidoDTO> renglones = ordenPedidoDTO.getRenglonOrdenPedidosDTO();	
		
		for (int i = 0; i < renglones.size(); i++) {
			ftEquiposYComponentes.setText(i+1, CODIGO, renglones.get(i).getCodigo());
			ftEquiposYComponentes.setText(i+1, NOMBRE_PARA_CLIENTE, renglones.get(i).getNombre());
			ftEquiposYComponentes.setText(i+1, CANTIDAD, String.valueOf(renglones.get(i).getCantidad()));
			ftEquiposYComponentes.setText(i+1, OBSERVACIONES, renglones.get(i).getObservaciones());
			ftEquiposYComponentes.getRowFormatter().setStyleName(i+1, "tablaRenglon");
		}
		
	}

	protected void salir() {
		this.hide();
	}
}

